package com.daily.DailyStudy.动态代理.JDK原生动态代理;


import com.daily.DailyStudy.动态代理.JDK原生动态代理.entity.UserProxy;
import com.daily.DailyStudy.动态代理.JDK原生动态代理.interceptor.UserServiceInterceptor;
import com.daily.DailyStudy.动态代理.JDK原生动态代理.service.UserService;
import com.daily.DailyStudy.动态代理.JDK原生动态代理.service.UserServiceImpl;

import java.lang.reflect.Proxy;

public class JDKProxyMain {

    /**
     * JDK原生动态代理
     *  JDK动态代理的两个核心接口(类)分别是InvocationHandler和Proxy。注意：只能代理接口。
     * */
    public static void main(String[] args) {
        UserProxy user = new UserProxy();
        user.setName("123");
        user.setAge(26);

        UserService us = new UserServiceImpl();
        UserServiceInterceptor usi = new UserServiceInterceptor(us);
        //1.类加载器 2.服务接口信息 3.invocationhandler 本身
        UserService proxy = (UserService)Proxy.newProxyInstance(us.getClass().getClassLoader(),us.getClass().getInterfaces(),usi);
        //通过动态代理增强业务
        proxy.addUser(user);

    }
}
